001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Nov 27, 2002
005     * Time: 3:57:05 PM
006     */
007    
008    package EVolve.visualization.XYViz.ValRefViz;
009    
010    import EVolve.visualization.XYViz.XYVisualization;
011    import EVolve.visualization.XYViz.ValRefViz.HotSpotViz.PredictionViz;
012    import EVolve.visualization.*;
013    import EVolve.visualization.VizFactory.VisualizationFactory;
014    import EVolve.util.predefinedutils.VizInfo;
015    import EVolve.Scene;
016    import EVolve.exceptions.VizInfoCreateException;
017    import EVolve.exceptions.NoDataPlotException;
018    import EVolve.data.ElementDefinition;
019    import EVolve.data.DataFilter;
020    import EVolve.data.Entity;
021    import EVolve.data.Selection;
022    
023    import java.util.*;
024    
025    
026    public abstract class ValueReferenceVisualization extends XYVisualization{
027        protected ValueDimension xAxis;
028        protected ReferenceDimension yAxis;
029        protected ReferenceDimension zAxis;
030    
031        public Dimension[] createDimension() {
032            Dimension [] returnDimension = new Dimension[2];
033    
034            xAxis = new ValueDimension();
035            yAxis = new ReferenceDimension();
036            zAxis = null;
037    
038            returnDimension[0] = xAxis;
039            returnDimension[1] = yAxis;
040    
041            return returnDimension;
042        }
043    
044        public ReferenceDimension getLinkableDimension(int dim) {
045            if (dim!=1) return null;
046            return (ReferenceDimension)dimension[dim];
047        }
048    
049        public void sort() {
050            try {
051                String comparatorName = "";
052                try {
053                    comparatorName = yAxis.getSelectedComparatorName();
054                } catch (IndexOutOfBoundsException e) {
055                    // this exception happens when user click fresh button before visulize the topmost viz
056                    return;
057                }
058                int beforeLink = yAxis.getEntityNumberBeforeLink();
059                Selection activeSelection = Scene.getFilter().getActiveSelection();
060                long start = ((activeSelection == null)) ? 0 : activeSelection.getStartTime();
061                if (normalOrientation) {
062                    canvas.setName(timeHeader() + xAxis.getName() + " (" +
063                                  ((interval == -1) ? ""+xMax+"" : ((""+start  +" - ")) + (xMax > start ? xMax : start+xMax)) +
064                                  (interval == -1 ? "" : (",interval " + String.valueOf(interval))) +")",
065                                  yAxis.getName() + " (" + ((beforeLink == -1) ? "" : (""+beforeLink+" / ")) +
066                                  yAxis.getEntityNumber() + ", " + comparatorName +")");
067                    canvas.setImage(image.getSortedImage(null, yAxis).getImage());
068                }
069                else {
070                    canvas.setName(yAxis.getName() + " (" + ((beforeLink == -1) ? "" : (""+beforeLink+" / ")) +
071                                   yAxis.getEntityNumber() + ", " + comparatorName + ")",
072                                   timeHeader() + xAxis.getName() + " (" +
073                                   ((interval == -1) ? ""+xMax+"" : ((""+start  +" - ")) + (xMax > start ? xMax : start+xMax))
074                                   + ")");
075                    canvas.setImage(image.getSortedImage(yAxis, null).getImage());
076                }
077                if ((phaseDetector!=null)&&(phaseDetectorEnabled)) {
078                    if (normalOrientation)
079                        phaseDetector.drawPhase(canvas);//, yAxis.getEntityNumber());
080                    else
081                        phaseDetector.drawPhase(canvas);//, xAxis.getEntityNumber());
082                } else {
083                    canvas.setPhases(null);
084                }
085                canvas.repaint();
086                enableBrowseSourceMenu();
087            } catch (NoDataPlotException e) {
088                Scene.showErrorMessage(e.getMessage());
089            }
090        }
091    
092        public HashMap getCurrentConfigure() {
093            try {
094                HashMap configure = super.getCurrentConfigure();
095    
096                VizInfo vizInfo = new VizInfo();
097                vizInfo.setFactory((VisualizationFactory)configure.get("Factory"));
098                vizInfo.setSubject((ElementDefinition)configure.get("Subject"));
099    
100                String[] dimensionDefs = new String[3];
101                dimensionDefs[0] = xAxis.getName() ;
102                dimensionDefs[1] = yAxis.getName() ;
103                dimensionDefs[2] = (zAxis == null) ? ";not using" : zAxis.getName() ;
104                configure.put("Dimension",vizInfo.createDimension(dimensionDefs));
105                if (this instanceof PredictionViz)
106                    configure.put("Predictor",((PredictionViz)this).getPredictor());
107                else
108                    configure.put("Predictor",null);
109                vizInfo.createInterval(new Integer(interval).toString());
110    
111                return configure;
112            } catch (VizInfoCreateException e) {
113                Scene.showErrorMessage(e.getMessage());
114            }
115            return null;
116        }
117    
118        protected void updateConfiguration() {
119            canvas.setName(xAxis.getName(), yAxis.getName());
120            super.updateConfiguration();
121        }
122    
123        /**
124         * Mouse moved.
125         *
126         * @param   x position on X-axis
127         * @param   y position on Y-axis
128         */
129        protected void mouseMove(int x, int y) {
130            int X = canvas.getImageX(x);
131            int Y = canvas.getImageY(y);
132            String time = xAxis.getName();
133    
134            if ((Y >= 0) && (Y < yAxis.getEntityNumber())) {
135                if (normalOrientation) {
136                    if (shift_pressed && (image.getSortedColor(null,yAxis,X,Y)==null))
137                        Scene.setStatus("  ");
138                    else {
139                        Entity entity = yAxis.getEntity(Y);
140                        time = ((interval == -1)||(X>=timeMap.size())||(X<0)) ? "" : time + ":" + ((long[])timeMap.get(X))[0];
141                        Scene.setStatus(entity == null ? " " : entity.getName()+" "+time);
142                    }
143                } else {
144                    if (shift_pressed && (image.getSortedColor(yAxis,null,X,Y)==null))
145                        Scene.setStatus("  ");
146                    else {
147                        Entity entity = yAxis.getEntity(X);
148                        time = ((interval == -1)||(Y>=timeMap.size())||(Y<0)) ? "" : time + ":" + ((long[])timeMap.get(Y))[0];
149                        Scene.setStatus(entity == null ? " " : entity.getName()+" "+time);
150                    }
151                }
152            } else {
153                Scene.setStatus(" ");
154            }
155        }
156    
157        protected void changeOrientation() {
158            super.changeOrientation();
159            sort();
160        }
161    
162        private String timeHeader() {
163            DataFilter dataFilter = xAxis.getDataFilter();
164            String[] property = dataFilter.getProperty();
165            for (int i=0; i< property.length; i++) {
166                if (property[i].equals("time"))
167                    return "Time - ";
168            }
169            return "";
170        }
171    
172        protected String getEntityUnderMouse() {
173            int X = canvas.getImageX(mouseX);
174            int Y = canvas.getImageY(mouseY);
175    
176            if ((Y >= 0) && (Y < yAxis.getEntityNumber())) {
177                if (normalOrientation) {
178                    if ((image.getSortedColor(null,yAxis,X,Y)!=null))
179                        return yAxis.getEntity(Y).getName();
180                } else {
181                    if (image.getSortedColor(yAxis,null,X,Y)!=null)
182                        return yAxis.getEntity(X).getName();
183                }
184            }
185    
186            return null;
187        }
188    
189        public Object clone(){
190            ValueReferenceVisualization o = null;
191    
192            o = (ValueReferenceVisualization)super.clone();
193    
194            o.xAxis =(ValueDimension)xAxis.clone();
195            o.yAxis =(ReferenceDimension) yAxis.clone();
196            o.zAxis =(zAxis == null) ? null : (ReferenceDimension)zAxis.clone();
197            //o.eventCounter = (eventCounter == null) ? null : (ArrayList) eventCounter.clone();
198            o.dimension[0] = o.xAxis;
199            o.dimension[1] = o.yAxis;
200            if (o.zAxis != null) o.dimension[2] = o.zAxis;
201            o.createMenu();
202            /*o.eventCounter = new ArrayList();
203            o.timeCounter = new ArrayList();
204            for (int i=0; i<eventCounter.size(); i++)
205                o.eventCounter.add(eventCounter.get(i));
206    
207            for (int i=0; i<timeCounter.size(); i++)
208                o.timeCounter.add(timeCounter.get(i));
209            */
210    
211            return o;
212        }
213    }